# 第一周第一单元：requests库入门

import requests

url = 'http://www.baidu.com' # 要爬取的网址

## requests.get()方法
def get_method():
	r = requests.get(url)  # requests方法 完整参数为 requests.get(url, params=None, **kwargs)
	print(r.status_code)  # HTTP请求的返回状态，200表示连接成功，404表示失败
	print(r.text)  # HTTP响应内容的字符串形式
	print(r.encoding)  # 从HTTP header中猜测的响应内容编码方式，如果未指定，默认为ISO-8859-1
	print(r.apparent_encoding)  # 从内容中分析出的响应内容编码方式
	print(r.content)  # HTTP响应内容的二进制形式
	print(r.raw)  # 返回原始响应体，也就是 urllib 的 response 对象，使用 r.raw.read() 读取
	# r.json() #Requests中内置的JSON解码器
	# r.raise_for_status() #失败请求(非200响应)抛出异常
	r.encoding = 'utf-8'
	print(r.text)  # 重新编码后显示正常


## requests.get()方法
# get_method()

# 理解requests库的异常
''''
requests.ConnectionError  # 网络连接错误异常，如DNS查询失败
requests.HTTPError  # HTTP错误异常
requests.URLRequired #URL缺失异常
requests.TooManyRedirects #超过最大重定向次数产生重定向异常
requests.ConnectTimeout #连接远程服务器超时异常
requests.Timeout #请求URL超时，产生超时异常
'''
# 爬取网页的通用代码框架
def get_html_text(url):
	try:
		r = requests.get(url, timeout=30)
		r.raise_for_status() #如果状态不是200，将引发HTTPError异常
		r.encoding = r.apparent_encoding
		return r.text
	except:
		return "产生异常"

# 判断异常
print(get_html_text(url))

# HTTP协议：超文本传输协议
# URL格式：http://host[:port][path]
# HTTP URL的理解：URL是通过HTTP协议存取文件资料

'''
HTTP协议对资源的操作：
GET\HEAD\POST\PUT\PATCH\DELETE
获取资源：GET\HEAD
放置资源：POST\PUT\PATCH
删除资源：DELETE
'''
def head_methon(url):
	r =requests.head(url)
	print(r.headers)
	print(r.text)

head_methon(url)

'''
requests.request(method, url, **kwargs)
method: 方法
url:网址
**kwargs:控制访问的参数，均为可选项
params:字典或字节序列，作为参数增加到url中
data:字典、字节序列或文件对象，作为request的内容
json:JSON格式的数据，作为request的内容
headers:字典，HTTP定制头
cookies:字典或CookieJar
auth:元组，支持HTTP认证功能
files:字典类型、传输文件

'''